home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD Concept 6
/
CD Concept 06.iso
/
mac
/
UTILITAIRE
/
RLaB
/
PROBLEMS
< prev
next >
Wrap
Text File
|
1995-01-14
|
6KB
|
163 lines
Solutions to some problems.
1.q) When I run `make Test' I get the message:
***complex division inaccuracy, check manually***
1.a) Some compilers do not generate the best code for complex
division. Most do. Some will pass or fail the test depending
upon the level of optimization used. If RLaB fails this test
do a manual check of complex division to verify that the
answer is correct to within +/- machine-epsilon. If the answer
is correct to within +/- machine-epsilon then it is safe to
use RLaB.
2.q) I get undefined symbols (like pow_zi) when the Makefile
tries to link rlab?
2.a) Undefined symbols like pow_zi are usually from the f2c
libraries. If the Makefile found libF77.a and libI77.a, and
these symbols are still undefined, then you probably have a
Fortran compiler installed on your machine. Some vendors
Fortran libraries will work OK. But, other vendors have
gratuitously changed the libraries.
Try getting the latest version of the f2c libraries
(research.att.com, or prep.ai.mit.edu). Or, you could write a
Fortran interface and mail it to me :-)
3.q) alloca is undefined?
3.a) `make ALLOCA=alloca.o'
4.q) When I run `make Test', it fails immediateley.
4.a) The problem may be that your system does not declare
strtod() in its header files. strtod() is used heavily by the
scanner, and if it is not declared the compiler will think it
returns int, which is not right at all. Fix: add
#include <whatever_include_defs_strtod.h>
5.q) When I run `make Test' RLaB reports an error in round()?
5.a) Some platforms (HP for instance) have a rint() function
in the system library, but it does not work. To fix: go into
config.h and comment out the two lines:
#define HAVE_RINT 1
#define HAVE_RINT_DEC 1
Then RLaB will uses its own rint().
***NOTE*** configure now checks for broken rint functions, and
will setup config.h properly.
6.q) I have compiled RLaB on a Sun, using SunOS-4.1.3 and gcc.
When I try and run RLaB I get an "out of memory" message, and
some complaints from flex?
6.a) This is a strange one, it does not happen on all Suns,
but someone discovered that compiling and linking to the GNU
libmalloc.a curred the problem.
7.q) (borrowed from Plplot FAQ) 3.5 I would like to issue a
plot command, have the window appear, or be re-painted, and
allow the user to continue with command line operation of
RLaB. I would like the user to be able to resize the window at
any time or cover/un-cover it at any time and have it re-paint
itself. The way I can get it to work is: the user issues plot
command, window appears and is resizable, etc... the user must
use the 3rd mouse button to "release" the window, after that
control returns to the command line, but the window will no
longer resize/repaint.
7.a) This is a feature, not a bug :-).
When the plotting package is waiting for the user to advance
the page, it is actually waiting for any X event. So events
like refresh and resize get intercepted and processed.
Also during the normal course of plotting, the X server is
periodically polled to find out if there are any events that
need processing, and handles them if so. I don't do this on
every graphics instruction because otherwise the overhead is
too large -- currently on every 20 line draws, every 10
polyline draws, and on every other call.
But once the user signals for the page advance, and control is
returned to the user program, there is no way for the X driver
to process any events simply because the control is in your
program, not in the X driver. The single-headedness of your
process becomes the culprit here. You can either sit in an
event loop, or be doing user code specific things, but not
both. There is one improvement that could still be made which
is to provide a plevents() call so you can explicitly force
all events to be handled, but that's just a bandaid solution
so I never put it in.
The real solution is to fork off the rendering into a separate
process, and this is just what I did with the Tcl/TK driver.
So, if you select the tk driver, your code can go about its
merry way while the graphics window can be refreshed, resized,
zoomed, printed, dumped, or whatever.
It'd also be a worthwhile project to split the X driver up
similarly, and there has been some interest in doing that (but
I don't plan to work on it).
8.q) Trying to run `make install' on a DECstation results in
make and/or shell errors?
8.a) The DECstation has a buggy make, and a horribly old
version of sh. Doing
gmake SHELL=/bin/sh5 install
Will yield a clean install. Note: gmake is GNU make.
9.q) I installed RLaB with Plplot and when I "interrupt"
(Ctrl-c) RLaB, it kills the Plplot tk window ?
9.a) Versions of Plplot earlier than (and including) v4p99g
pass all signals along to the child plserver
process. Hopefully this will be fixed, or a workaround
provided in later versions. But, for now you must modify tk.c
and recompile Plplot. The following patch modifies tk.c so
that child plserver processes do not get passed SIGINT
signals. With this patch you can interrupt RLaB without
killing plserver.
*** tk.c~ Fri May 13 22:43:13 1994
--- tk.c Sat Jul 16 09:08:24 1994
***************
*** 1052,1057 ****
--- 1052,1066 ----
abort_session(pls, "Unable to fork server process");
}
else if (pid == 0) {
+ int rs;
+ sigset_t set;
+ sigemptyset (&set);
+ sigaddset (&set, SIGINT);
+ if ((rs = sigprocmask (SIG_BLOCK, &set, 0)) == -1)
+ {
+ fprintf(stderr, "tk.c: sigprocmask troubles\n");
+ }
+
fprintf(stderr, "Starting up %s\n", plserver_exec);
if (execv(plserver_exec, argv)) {
fprintf(stderr, "Unable to exec server process.\n");
10.q&a) On HP and DEC-Alpha computers you may need to compile
everything in the "traditional" mode (not ANSI), with the
exception of r_plot.c. This may also be true for IBMs AIX.
11.q) I am having trouble with compiling fpe.c, I gets lots of
errors I don't understand.
11.a) Apparently configure did not understand your systems
method of setting up floating point exceptions. You can
completely disable the function setup_fpe_handling by running
configure with the `--disable-fpe' option.